import {
    useRouteStore,
} from './routeStore';
import permission from '@/permission';

// 扩展路由跳转方法
const queryOptions = (options: any) => {
    const query = Object.keys(options || {}).map(key => {
        return `${key}=${options[key]}`;
    }).join('&');
    return query? `?${query}` : '';
}

// 路由前跳转拦截器
export default async (options: any) => {
    console.log('beforeRouteEnter', options);

    const routeStore = useRouteStore();
    const currentRoute = routeStore.getCurrentRoute();
    // 判斷当前url是否存在?符号，且存在如果不存在则拼接参数
    if(!options.url.includes('?') && options.params) {
        options.url += queryOptions(options.params);
    } 
    // 如果当前url存在?符号，且存在参数，则拼接参数
    else if(options.url.includes('?') && options.params) {
        options.url += ('&' + queryOptions(options.params).substring(1));
    }

    const routeInfo = routeStore.getRouteInfo(options.url);
    if(routeInfo && routeInfo.roles && routeInfo.roles.length > 0) {
        // 当权限不存在时，跳转到403页面（当前才用的是所有权限都存在则返回true）
        const hasPermission = permission.anyPermission(routeInfo.roles);
        if(!hasPermission) {
            uni.navigateTo({
                url: '/pages-sub/exceptions/403',
            });
            throw new Error('没有权限');
        }
    }

    // 判断是否为分包路由
    const isSubPackage = routeStore.isSubPackage(options.url);
    // 得到纯净的页面url
    const purePageURL = options.url.split('?')[0];
    const isCached = routeStore.cachePages.includes(purePageURL);
    if (isSubPackage && !isCached) {
        // 直接调用分包页面会timeout，延迟一点时间调用
        await routeStore.slowLoadSubPackagePage(purePageURL);
        return options;
    }

    // 如果当前跳转的路由属于白名单，则不进行拦截
    if (routeStore.whiteList.includes(currentRoute || '')) {
        return options;
    }
    // 判断该路由是否设置权限


    return options;
}